home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CD ROM Paradise Collection 4
/
CD ROM Paradise Collection 4 1995 Nov.iso
/
program
/
swagg_m.zip
/
MEMORY.SWG
/
0025_Shrink-Expand the Heap.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1993-08-27
|
1KB
|
33 lines
{
KENT BRIGGS
Here is what I came up with regarding my problem of needing a large
heap (temporarily) and needing memory for an EXEC routine:
}
procedure heap_shrink; {free up all unused heap}
begin
reg.bx := memw[seg(heapptr) : ofs(heapptr) + 2] - prefixseg;
reg.es := prefixseg;
reg.ah := $4a; {dos memory alloc. interrupt}
msdos(reg);
end;
procedure heap_expand; {reclaim unused heap}
begin
reg.bx := memw[seg(heapend) : ofs(heapend) + 2] - prefixseg;
reg.es := prefixseg;
reg.ah := $4a;
msdos(reg);
end;
{
Leave the default heapmax at 655360. Dispose of all temporary pointers
and call heap_shrink right before exec(my_prgm) and heap_expand right
after. The memw's get the segment addresses for the heapend and heapptr
variables (see memory map in manual). Subtract the PSP segment and that
gets you the number of paragraphs (16 byte blocks) to allocate.
Anyone see any dangers with this scheme? I instantly freed up 110K for
DOS shells in my application. No problems so far.
}